//router/module/generateRouter.js
import React, { lazy, Suspense } from "react";
import { Navigate, Outlet } from "react-router-dom";

const lazyLoad = (componentPath) => {
  return lazy(() => import(`@/pages${componentPath}.jsx`));
};
export const generateRoutes = (menuList) => {
  return menuList.map((item) => {
    const route = {
      path: item.path.startsWith("/") ? item.path : `/${item.path}`,
      name: item.name,
      meta: item.meta,
    };
    // 如果有component，加载组件
    if (item.component) {
      const Component = lazyLoad(item.component);
      route.element = (
        <Suspense fallback={<div>加载中...</div>}>
          <Component />
        </Suspense>
      );
    } else if (item.children && item.children.length) {
      // 没有组件，但有子路由，渲染 Outlet 用于展示子路由
      route.element = <Outlet />;
    }
    // 递归处理子路由
    if (item.children && item.children.length) {
      route.children = generateRoutes(item.children);
    }
    // 处理重定向：如果当前路由有redirect，且访问当前路由（path），就重定向到redirect指向的路由
    if (item.redirect) {
      // 把当前路由的element替换成重定向组件，或者把一个重定向路由插入到子路由里
      // 如果当前路由本身有组件或子路由，则加一个重定向子路由
      // 这里加一个空路径子路由作为重定向
      if (!route.children) {
        route.children = [];
      }
      route.children.unshift({
        path: "",
        element: <Navigate to={item.redirect} replace />,
      });
    }
    return route;
  });
};

// 递归查找 title
// export const findTitleByPath = (routes = [], path) => {
//   for (const route of routes) {
//     if (route.path === path) {
//       return route.meta?.title || path;
//     }
//     if (route.children) {
//       const childTitle = findTitleByPath(route.children, path);
//       if (childTitle) return childTitle;
//     }
//   }
//   return path;
// };
